//package com.ruoyi.common.utils.fabric;
//
//import org.hyperledger.fabric.sdk.Enrollment;
//import org.hyperledger.fabric.sdk.User;
//import org.hyperledger.fabric.sdk.security.CryptoSuite;
//import org.hyperledger.fabric.sdk.security.CryptoSuiteFactory;
//import org.springframework.core.io.ClassPathResource;
//
//import javax.xml.bind.DatatypeConverter;
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.nio.file.Files;
//import java.nio.file.Path;
//import java.nio.file.Paths;
//import java.security.KeyFactory;
//import java.security.PrivateKey;
//import java.security.interfaces.RSAPrivateKey;
//import java.security.spec.PKCS8EncodedKeySpec;
//import java.util.Set;
//
//public class MyUser implements User {
//    private String name;
//    private String certificate; // 用户证书
//    private PrivateKey privateKey;   // 用户私钥
//    private CryptoSuite cryptoSuite;
//
//    // Enrollment 接口的具体实现
//    private class UserEnrollment implements Enrollment {
//        @Override
//        public PrivateKey getKey() {
//            return privateKey; // 返回用户的私钥
//        }
//
//        @Override
//        public String getCert() {
//            return certificate; // 返回用户的证书
//        }
//    }
//
//    public MyUser(String name, String certificatePath, String privateKeyPath) throws Exception {
//        this.name = name;
//
//        // 使用 ClassPathResource 从 classpath 中加载证书文件
//        this.certificate = loadFileFromClasspath(certificatePath);
//
//        // 使用 ClassPathResource 从 classpath 中加载私钥文件并转换为 PrivateKey 对象
////        byte[] privateKeyBytes = loadFileFromClasspath(privateKeyPath).getBytes();
////        this.privateKey = loadPrivateKey(privateKeyBytes);
//        this.privateKey = loadPrivateKey(privateKeyPath);
//
//        // 创建加密套件
//        this.cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite();
//    }
//
//    @Override
//    public String getName() {
//        return this.name;
//    }
//
//    @Override
//    public Set<String> getRoles() {
//        return null;
//    }
//
//    @Override
//    public String getAccount() {
//        return null;
//    }
//
//    @Override
//    public String getAffiliation() {
//        return null;
//    }
//
//    @Override
//    public Enrollment getEnrollment() {
//        return new UserEnrollment(); // 返回自定义的 Enrollment 实现
//    }
//
//    @Override
//    public String getMspId() {
//        return "YourMSPID"; // 替换为你的 MSP ID
//    }
//
//
//    // 加载私钥（以 PKCS#8 格式）
//    public PrivateKey loadPrivateKey(byte[] privateKeyBytes) throws Exception {
//
//        // 使用 KeyFactory 获取 RSA 类型的实例
//        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
//
//        // 通过 PKCS8EncodedKeySpec 解析字节数组生成私钥
//        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
//
//        // 生成私钥并返回
//        return keyFactory.generatePrivate(keySpec);
//    }
//
//    // 从 classpath 中加载文件
//    private String loadFileFromClasspath(String filePath) throws IOException {
//        // 创建 ClassPathResource 来加载文件
//        ClassPathResource resource = new ClassPathResource(filePath);
//
//        // 检查文件是否存在
//        if (!resource.exists()) {
//            throw new IOException("File not found in classpath: " + filePath);
//        }
//
//        // 读取文件内容并返回字符串
//        Path path = resource.getFile().toPath();
//        return new String(Files.readAllBytes(path));
//    }
//
//    public PrivateKey loadPrivateKey(String filePath) throws Exception {
//        // 创建 ClassPathResource 来加载文件
//        ClassPathResource resource = new ClassPathResource(filePath);
//
//        // 读取文件内容并返回字符串
//        if (!resource.exists()) {
//            throw new IOException("File not found in classpath: " + filePath);
//        }
//
//        try (BufferedReader brKey = new BufferedReader(new InputStreamReader(resource.getInputStream()))) {
//            StringBuilder keyBuilder = new StringBuilder();
//            String line;
//            while ((line = brKey.readLine()) != null) {
//                // 仅处理非私钥行
//                if (!line.contains("PRIVATE")) {
//                    keyBuilder.append(line);
//                }
//            }
//
//            byte[] encoded = DatatypeConverter.parseBase64Binary(keyBuilder.toString());
//            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
//            KeyFactory keyFactory = KeyFactory.getInstance("EC");
//            return keyFactory.generatePrivate(keySpec);
//        } catch (Exception e) {
//            throw new Exception("Failed to load private key from file: " + filePath, e);
//        }
//    }
//
//}
